﻿<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Lambda表達式學習.aspx.cs" Inherits="Lambda表達式學習" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">

.cs
{
	display:none;
}
.vb
{
	display:none;
}
.cpp
{
	display:none;
}
.nu
{
   display:inline;
}
.nu
{
	display:none;
}
    </style>
</head>
<body>
    <div>
        <div id="ctl00_rs1_eb1_Panel1" class="EyebrowMenuBar">
            <div id="ctl00$rs1$eb1$ctl00" class="stat" style="position: relative;">
                <a href="http://msdn.microsoft.com/zh-cn/ms348103.aspx" title="MSDN">MSDN</a><div 
                    id="ctl00$rs1$eb1$ctl00_Popup" class="popup" 
                    style="position: absolute; visibility: hidden; left: -65534px; width: 38px; height: 21px;">
                    <span name="http://msdn.microsoft.com/zh-cn/library/36cf08ac-18d1-4fe0-abc8-466852a0f9c7(n).aspx">
                    请稍候</span></div>
                <div id="ctl00$rs1$eb1$ctl00_Anim" class="TFlyPopupAnimate">
                </div>
            </div>
            <div id="ctl00$rs1$eb1$ctl01" class="stat" style="position: relative;">
                <a href="http://msdn.microsoft.com/zh-cn/library/ms123401.aspx" 
                    title="MSDN Library">MSDN Library</a><div id="ctl00$rs1$eb1$ctl01_Popup" 
                    class="popup" 
                    style="position: absolute; visibility: hidden; left: -65534px; width: 38px; height: 21px;">
                    <span name="http://msdn.microsoft.com/zh-cn/library/ms310241(n).aspx">请稍候</span></div>
                <div id="ctl00$rs1$eb1$ctl01_Anim" class="TFlyPopupAnimate">
                </div>
            </div>
            <div id="ctl00$rs1$eb1$ctl02" class="stat" style="position: relative;">
                <a href="http://msdn.microsoft.com/zh-cn/library/aa187916.aspx" title="开发工具和语言">
                开发工具和语言</a><div id="ctl00$rs1$eb1$ctl02_Popup" class="popup" 
                    style="position: absolute; visibility: hidden; left: -65534px; width: 38px; height: 21px;">
                    <span name="http://msdn.microsoft.com/zh-cn/library/aa187916(n).aspx">请稍候</span></div>
                <div id="ctl00$rs1$eb1$ctl02_Anim" class="TFlyPopupAnimate">
                </div>
            </div>
            <div id="ctl00$rs1$eb1$ctl03" class="stat" style="position: relative;">
                <a href="http://msdn.microsoft.com/zh-cn/library/aa187917.aspx" 
                    title="Visual Studio 2008">Visual Studio 2008</a><div 
                    id="ctl00$rs1$eb1$ctl03_Popup" class="popup" 
                    style="position: absolute; visibility: hidden; left: -65534px; width: 38px; height: 21px;">
                    <span name="http://msdn.microsoft.com/zh-cn/library/aa187917(n).aspx">请稍候</span></div>
                <div id="ctl00$rs1$eb1$ctl03_Anim" class="TFlyPopupAnimate">
                </div>
            </div>
            <div id="ctl00$rs1$eb1$ctl04" class="stat" style="position: relative;">
                <a href="http://msdn.microsoft.com/zh-cn/library/52f3sw5c.aspx" 
                    title="Visual Studio">Visual Studio</a><div id="ctl00$rs1$eb1$ctl04_Popup" 
                    class="popup" 
                    style="position: absolute; visibility: hidden; left: -65534px; width: 38px; height: 21px;">
                    <span name="http://msdn.microsoft.com/zh-cn/library/bb400865(n).aspx">请稍候</span></div>
                <div id="ctl00$rs1$eb1$ctl04_Anim" class="TFlyPopupAnimate">
                </div>
            </div>
            <div id="ctl00$rs1$eb1$ctl05" class="stat" style="position: relative;">
                <a href="http://msdn.microsoft.com/zh-cn/library/kx37x362.aspx" 
                    title="Visual C#">Visual C#</a><div id="ctl00$rs1$eb1$ctl05_Popup" 
                    class="popup" 
                    style="position: absolute; visibility: hidden; left: -65534px; width: 38px; height: 21px;">
                    <span name="http://msdn.microsoft.com/zh-cn/library/ms297410(n).aspx">请稍候</span></div>
                <div id="ctl00$rs1$eb1$ctl05_Anim" class="TFlyPopupAnimate">
                </div>
            </div>
            <div id="ctl00$rs1$eb1$ctl06" class="stat" style="position: relative;">
                <a href="http://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx" title="C# 编程指南">
                C# 编程指南</a><div id="ctl00$rs1$eb1$ctl06_Popup" class="popup" 
                    style="position: absolute; visibility: hidden; left: -65534px; width: 38px; height: 21px;">
                    <span name="http://msdn.microsoft.com/zh-cn/library/ms297449(n).aspx">请稍候</span></div>
                <div id="ctl00$rs1$eb1$ctl06_Anim" class="TFlyPopupAnimate">
                </div>
            </div>
            <div id="ctl00$rs1$eb1$ctl07" class="stat" style="position: relative;">
                <a href="http://msdn.microsoft.com/zh-cn/library/ms173142.aspx" 
                    title="语句、表达式和运算符（C# 编程指南）">语句、表达式和运算符（C# 编程指南）</a><div 
                    id="ctl00$rs1$eb1$ctl07_Popup" class="popup" 
                    style="position: absolute; visibility: hidden; left: -65534px; width: 38px; height: 21px;">
                    <span name="http://msdn.microsoft.com/zh-cn/library/ms297456(n).aspx">请稍候</span></div>
                <div id="ctl00$rs1$eb1$ctl07_Anim" class="TFlyPopupAnimate">
                </div>
            </div>
            <div id="ctl00$rs1$eb1$ctl08" class="stat" style="position: relative;">
                <a href="http://msdn.microsoft.com/zh-cn/library/bb882516.aspx" 
                    title="匿名函数（C# 编程指南）">匿名函数（C# 编程指南）</a><div id="ctl00$rs1$eb1$ctl08_Popup" 
                    class="popup" 
                    style="position: absolute; visibility: hidden; left: -65534px; width: 38px; height: 21px;">
                    <span name="http://msdn.microsoft.com/zh-cn/library/bb913933(n).aspx">请稍候</span></div>
                <div id="ctl00$rs1$eb1$ctl08_Anim" class="TFlyPopupAnimate">
                </div>
            </div>
            <div id="ctl00$rs1$eb1$ctl09" class="stat" 
                style="position: relative; z-index: 0;">
                <a href="http://msdn.microsoft.com/zh-cn/library/bb397687.aspx" 
                    title="Lambda 表达式（C# 编程指南）">Lambda 表达式（C# 编程指南）</a><div 
                    id="ctl00$rs1$eb1$ctl09_Popup" class="popup" 
                    style="overflow: auto; position: absolute; visibility: hidden; left: -10000px; width: 280px; height: 84px; cursor: default; top: 23px;">
                    <ul class="toc">
                        <li name="na">
                            <img class="LibC_e" src="http://i.msdn.microsoft.com/Global/Images/clear.gif" /><a 
                                href="http://msdn.microsoft.com/zh-cn/library/bb397675.aspx" target="_top">如何：在查询中使用 
                            Lambda 表达式（C# 编程指南）</a></li>
                        <li name="na">
                            <img class="LibC_e" src="http://i.msdn.microsoft.com/Global/Images/clear.gif" /><a 
                                href="http://msdn.microsoft.com/zh-cn/library/bb383984.aspx" target="_top">如何：在 
                            LINQ 外部使用 Lambda 表达式（C# 编程指南）</a></li>
                    </ul>
                </div>
                <div id="ctl00$rs1$eb1$ctl09_Anim" class="TFlyPopupAnimate" 
                    style="visibility: hidden; width: 14.1px; height: 4.3px; top: 23px; left: 0px;">
                </div>
            </div>
        </div>
    </div>
    <div class="RightPanel">
        <div class="ContentBar">
            <div id="ctl00_rs1_ExpandCollapse_ECDiv" class="ECPanel">
                <img id="ctl00_rs1_ExpandCollapse_ECImg" align="middle" alt="全部折叠/全部展开" 
                    class="LibC_o" onclick="EC_Click()" 
                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" 
                    style="border-width: 0px;" /><a id="ctl00_rs1_ExpandCollapse_ECLink" 
                    class="ECLink" href="javascript:EC_Click()">全部折叠</a></div>
            
<script type="text/Javascript">
</script>

            <style type="text/css">

.nu
{
	display:none;
}
.cpp
{
	display:none;
}
.cs
{
	display:none;
}
.vb
{
	display:none;
}
</style>
            <style id="LanguageSpecificTextStyle" type="text/css">

.nu
{
   display:inline;
}
</style>
            <div id="ctl00_rs1_DropDownFilter_DropDownFilterMain" 
                class="DropDownFilterStyle">
                <img id="ctl00_rs1_DropDownFilter_MTPS_DD_ImageArrow" alt="语言筛选器" 
                    class="MTPS_DropDownImage LibC_arrow-off" onclick="DDFilterOn(event);" 
                    onmouseout="ChangeDropDownImage(false);RequestHideLanguagesMenu();" 
                    onmouseover="ChangeDropDownImage(true);ResetLanguagesMenuTimer(event);" 
                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" 
                    style="border-width: 0px;" title="语言筛选器" /><a 
                    id="ctl00_rs1_DropDownFilter_Mtps_DropDownFilterText" class="DropDownFilterOff" 
                    href="http://msdn.microsoft.com/zh-cn/library/bb397687.aspx#Mtps_DropDownFilterText" 
                    onclick="DDFilterOn(event);" onmouseout="ChangeDropDownImage(false);" 
                    onmouseover="ChangeDropDownImage(true);" title="语言筛选器">语言筛选器 : 全部</a><div 
                    id="ctl00_rs1_DropDownFilter_Mtps_DropDownPopUp" class="MTPS_PopupDivPanel" 
                    onmouseout="RequestHideLanguagesMenu();" 
                    onmouseover="ResetLanguagesMenuTimer(event);" style="display: none;">
                    <div class="DivCbxLabelLanguage">
                        <input id="ctl00_rs1_DropDownFilter_DropDownLngFilterCtrl" 
                            arrayvalue="visualbasic" checked="checked" 
                            name="ctl00$rs1$DropDownFilter$DropDownLngFilterCtrl1" 
                            onclick="SetLangFilter(null,true);" type="checkbox" value="Visual Basic" /><span 
                            id="ctl00_rs1_DropDownFilter_ctl00_rs1_DropDownFilter_DropDownLngFilterCtrl_0" 
                            title="Visual Basic">Visual Basic<br />
                        </span>
                    </div>
                    <div class="DivCbxLabelLanguage">
                        <input id="ctl00_rs1_DropDownFilter_DropDownLngFilterCtrl0" arrayvalue="csharp" 
                            checked="checked" name="ctl00$rs1$DropDownFilter$DropDownLngFilterCtrl2" 
                            onclick="SetLangFilter(null,true);" type="checkbox" value="C#" /><span 
                            id="ctl00_rs1_DropDownFilter_ctl00_rs1_DropDownFilter_DropDownLngFilterCtrl_1" 
                            title="C#">C#<br />
                        </span>
                    </div>
                    <div class="DivCbxLabelLanguage">
                        <input id="ctl00_rs1_DropDownFilter_DropDownLngFilterCtrl1" 
                            arrayvalue="managedcplusplus" checked="checked" 
                            name="ctl00$rs1$DropDownFilter$DropDownLngFilterCtrl3" 
                            onclick="SetLangFilter(null,true);" type="checkbox" value="C++" /><span 
                            id="ctl00_rs1_DropDownFilter_ctl00_rs1_DropDownFilter_DropDownLngFilterCtrl_2" 
                            title="C++">C++<br />
                        </span>
                    </div>
                    <div class="DivCbxLabelLanguage">
                        <input id="ctl00_rs1_DropDownFilter_DropDownLngFilterCtrl2" arrayvalue="jsharp" 
                            checked="checked" name="ctl00$rs1$DropDownFilter$DropDownLngFilterCtrl4" 
                            onclick="SetLangFilter(null,true);" type="checkbox" value="J#" /><span 
                            id="ctl00_rs1_DropDownFilter_ctl00_rs1_DropDownFilter_DropDownLngFilterCtrl_3" 
                            title="J#">J#<br />
                        </span>
                    </div>
                    <div class="DivCbxLabelLanguage">
                        <input id="ctl00_rs1_DropDownFilter_DropDownLngFilterCtrl3" 
                            arrayvalue="jscript" checked="checked" 
                            name="ctl00$rs1$DropDownFilter$DropDownLngFilterCtrl5" 
                            onclick="SetLangFilter(null,true);" type="checkbox" value="JScript" /><span 
                            id="ctl00_rs1_DropDownFilter_ctl00_rs1_DropDownFilter_DropDownLngFilterCtrl_4" 
                            title="JScript">JScript<br />
                        </span>
                    </div>
                    <div class="DivCbxLabelLanguage">
                        <input id="ctl00_rs1_DropDownFilter_DropDownLngFilterCtrl4" arrayvalue="xaml" 
                            checked="checked" name="ctl00$rs1$DropDownFilter$DropDownLngFilterCtrl" 
                            onclick="SetLangFilter(null,true);" type="checkbox" value="XAML" /><span 
                            id="ctl00_rs1_DropDownFilter_ctl00_rs1_DropDownFilter_DropDownLngFilterCtrl_5" 
                            title="XAML">XAML<br />
                        </span>
                    </div>
                </div>
<script type="text/Javascript">
var strConstLangFilterAll ="全部";
var strConstLangFilterMulti ="多个";
var strConstLangFilterNone ="无";
var strConstLangFilterText ="语言筛选器";
var oMTPS_DD_ImgArrow = document.getElementById("ctl00_rs1_DropDownFilter_MTPS_DD_ImageArrow");
var oMTPS_DD_PanelLink = document.getElementById("ctl00_rs1_DropDownFilter_Mtps_DropDownFilterText");
var oMTPS_DD_Div = document.getElementById("ctl00_rs1_DropDownFilter_DropDownFilterMain");
var oMTPS_DD_PopUpDiv = document.getElementById("ctl00_rs1_DropDownFilter_Mtps_DropDownPopUp");
</script>
            </div>
        </div>
        <div class="ContentArea">
            <div class="topic">
                <div class="majorTitle">
                    C# 编程指南<!----></div>
                <div class="title">
                    Lambda 表达式（C# 编程指南）<!----></div>
                <!--
      Content type: Devdiv1. Transform: orcas2mtps.xslt.
    -->
                <div id="mainSection">
                    <div id="mainBody">
                        <p>
                        </p>
                        <p>
                            <span style="color: DarkGray;">更新：2007 年 11 月</span></p>
                        <div class="introduction">
                            <p>
                                “Lambda 表达式”是一个匿名函数，它可以包含表达式和语句，并且可用于创建委托或表达式目录树类型。 
                            </p>
                            <p>
                                所有 Lambda 表达式都使用 Lambda 运算符 <a id="ctl00_rs1_mainContentContainer_ctl01" 
                                    href="http://msdn.microsoft.com/zh-cn/library/bb311046.aspx" 
                                    onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl01',this);">
                                =&gt;</a>，该运算符读为“goes to”。该 Lambda 运算符的左边是输入参数（如果有），右边包含表达式或语句块。Lambda 表达式 
                                <span class="code">x =&gt; x * x</span> 读作“x goes to x times 
                                x”。可以将此表达式分配给委托类型，如下所示： 
                            </p>
                            <div id="ctl00_rs1_mainContentContainer_ctl02_other" class="">
                                <div class="CodeSnippetTitleBar">
                                    <div class="CodeDisplayLanguage">
                                    </div>
                                    <div class="CopyCodeButton">
                                        <a class="copyCode" 
                                            href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl02other');">
                                        <img align="middle" border="0" class="LibC_copy_off" height="9" 
                                            src="http://i.msdn.microsoft.com/Global/Images/clear.gif" /> 复制代码</a></div>
                                </div>
                                <div dir="ltr">
                                    <pre id="ctl00_rs1_mainContentContainer_ctl02other" class="libCScode" 
                                        space="preserve" style="white-space: pre-wrap;">delegate int del(int i);
del myDelegate = x =&gt; x * x;
int j = myDelegate(5); //j = 25</pre>
                                </div>
                            </div>
                            <p>
                                创建表达式目录树类型： 
                            </p>
                            <div id="ctl00_rs1_mainContentContainer_ctl03_other" class="">
                                <div class="CodeSnippetTitleBar">
                                    <div class="CodeDisplayLanguage">
                                    </div>
                                    <div class="CopyCodeButton">
                                        <a class="copyCode" 
                                            href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl03other');">
                                        <img align="middle" border="0" class="LibC_copy_off" height="9" 
                                            src="http://i.msdn.microsoft.com/Global/Images/clear.gif" /> 复制代码</a></div>
                                </div>
                                <div dir="ltr">
                                    <pre id="ctl00_rs1_mainContentContainer_ctl03other" class="libCScode" 
                                        space="preserve" style="white-space: pre-wrap;">using System.Linq.Expressions;
// ...
Expression&lt;del&gt; = x =&gt; x * x;</pre>
                                </div>
                            </div>
                            <p>
                                <span sdata="langKeyword" value="=&gt;"><span class="keyword">=&gt;</span></span> 
                                运算符具有与赋值运算符 (<span sdata="langKeyword" value="="><span class="keyword">=</span></span>) 
                                相同的优先级，并且是右结合运算符。 
                            </p>
                            <p>
                                Lambda 用在基于方法的 LINQ 查询中，作为诸如 <span sdata="cer" 
                                    target="M:System.Linq.Enumerable.Where``1(System.Collections.Generic.IEnumerable{``0},System.Func{``0,System.Boolean})">
                                <a id="ctl00_rs1_mainContentContainer_ctl04" 
                                    href="http://msdn.microsoft.com/zh-cn/library/system.linq.enumerable.where.aspx" 
                                    onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl04',this);">
                                Where</a></span> 和 <span sdata="cer" 
                                    target="M:System.Linq.Queryable.Where``1(System.Linq.IQueryable{``0},System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}})">
                                <a id="ctl00_rs1_mainContentContainer_ctl05" 
                                    href="http://msdn.microsoft.com/zh-cn/library/system.linq.queryable.where.aspx" 
                                    onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl05',this);">
                                Where</a></span> 等标准查询运算符方法的参数。 
                            </p>
                            <p>
                                使用基于方法的语法在 <span sdata="cer" target="T:System.Linq.Enumerable">
                                <a id="ctl00_rs1_mainContentContainer_ctl06" 
                                    href="http://msdn.microsoft.com/zh-cn/library/system.linq.enumerable.aspx" 
                                    onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl06',this);">
                                Enumerable</a></span> 类中调用 <span sdata="cer" 
                                    target="M:System.Linq.Enumerable.Where``1(System.Collections.Generic.IEnumerable{``0},System.Func{``0,System.Boolean})">
                                <a id="ctl00_rs1_mainContentContainer_ctl07" 
                                    href="http://msdn.microsoft.com/zh-cn/library/system.linq.enumerable.where.aspx" 
                                    onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl07',this);">
                                Where</a></span> 方法时（像在 LINQ to Objects 和 LINQ to XML 中那样），参数是委托类型 
                                <span sdata="cer" target="T:System.Func`2">
                                <a id="ctl00_rs1_mainContentContainer_ctl08" 
                                    href="http://msdn.microsoft.com/zh-cn/library/bb549151.aspx" 
                                    onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl08',this);">
                                System<span class="cs">.</span><span class="vb">.</span><span class="cpp">::</span><span 
                                    class="nu">.</span>Func<span class="cs">&lt;</span><span class="vb">(Of </span>
                                <span class="cpp">&lt;</span><span class="nu">(</span>T, TResult<span class="cs">&gt;</span><span 
                                    class="vb">)</span><span class="cpp">&gt;</span><span class="nu">)</span></a></span>。使用 
                                Lambda 表达式创建委托最为方便。例如，当您在 <span sdata="cer" target="T:System.Linq.Queryable">
                                <a id="ctl00_rs1_mainContentContainer_ctl12" 
                                    href="http://msdn.microsoft.com/zh-cn/library/system.linq.queryable.aspx" 
                                    onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl12',this);">
                                System.Linq<span class="cs">.</span><span class="vb">.</span><span class="cpp">::</span><span 
                                    class="nu">.</span>Queryable</a></span> 类中调用相同的方法时（像在 LINQ to SQL 
                                中那样），则参数类型是 <span sdata="cer" target="T:System.Linq.Expressions.Expression">
                                <a id="ctl00_rs1_mainContentContainer_ctl14" 
                                    href="http://msdn.microsoft.com/zh-cn/library/system.linq.expressions.expression.aspx" 
                                    onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl14',this);">
                                System.Linq.Expressions<span class="cs">.</span><span class="vb">.</span><span 
                                    class="cpp">::</span><span class="nu">.</span>Expression</a></span>&lt;Func&gt;，其中 
                                Func 是包含至多五个输入参数的任何 Func 委托。同样，Lambda 表达式只是一种用于构造表达式目录树的非常简练的方式。尽管事实上通过 Lambda 
                                创建的对象的类型是不同的，但 Lambda 使得 <b>Where</b> 调用看起来类似。 
                            </p>
                            <p>
                                在前面的示例中，请注意委托签名具有一个 <span sdata="langKeyword" value="int"><span class="keyword">
                                int</span></span> 类型的隐式类型输入参数，并返回 <span sdata="langKeyword" value="int">
                                <span class="keyword">int</span></span>。可以将 Lambda 表达式转换为该类型的委托，因为该表达式也具有一个输入参数 
                                (<span class="code">x</span>)，以及一个编译器可隐式转换为 <span sdata="langKeyword" 
                                    value="int"><span class="keyword">int</span></span> 
                                类型的返回值。（以下几节中将对类型推理进行详细讨论。）使用输入参数 5 调用委托时，它将返回结果 25。 
                            </p>
                            <p>
                                在 <a id="ctl00_rs1_mainContentContainer_ctl16" 
                                    href="http://msdn.microsoft.com/zh-cn/library/scekt9xw.aspx" 
                                    onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl16',this);">
                                is</a> 或 <a id="ctl00_rs1_mainContentContainer_ctl17" 
                                    href="http://msdn.microsoft.com/zh-cn/library/cscsdfbt.aspx" 
                                    onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl17',this);">
                                as</a> 运算符的左侧不允许使用 Lambda。 
                            </p>
                            <p>
                                适用于匿名方法的所有限制也适用于 Lambda 表达式。有关更多信息，请参见<span sdata="link"><a 
                                    id="ctl00_rs1_mainContentContainer_ctl18" 
                                    href="http://msdn.microsoft.com/zh-cn/library/0yw3tz5k.aspx" 
                                    onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl18',this);">匿名方法（C# 
                                编程指南）</a></span>。 
                            </p>
                        </div>
                        <div id="ctl00_rs1_mainContentContainer_cpe62400" 
                            class="MTPS_CollapsibleRegion">
                            <div id="ctl00_rs1_mainContentContainer_cpe62400_h" class="CollapseRegionLink">
                                <img id="ctl00_rs1_mainContentContainer_cpe62400_i" class="LibC_o" 
                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" 
                                    style="border-width: 0px; vertical-align: middle;" />&nbsp;Lambda 表达式 
                            </div>
                            <div id="ctl00_rs1_mainContentContainer_cpe62400_c" 
                                class="MTPS_CollapsibleSection" 
                                style="overflow: visible; display: block; height: auto; width: 1217px;">
                                <div id="" class="MTPS_CollapsibleSection" style="display: block;">
                                    <a name="sectionToggle0"><!----></a>
                                    <p>
                                        表达式在右边的 Lambda 表达式称为“Lambda 表达式”。Lambda 表达式在构造<span sdata="link"><a 
                                            id="ctl00_rs1_mainContentContainer_ctl26" 
                                            href="http://msdn.microsoft.com/zh-cn/library/bb397951.aspx" 
                                            onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe62400_c|ctl00_rs1_mainContentContainer_ctl26',this);">表达式目录树</a></span>时广泛使用。Lambda 
                                        表达式返回表达式的结果，并采用以下基本形式： 
                                    </p>
                                    <div id="ctl00_rs1_mainContentContainer_ctl27_other" class="">
                                        <div class="CodeSnippetTitleBar">
                                            <div class="CodeDisplayLanguage">
                                            </div>
                                            <div class="CopyCodeButton">
                                                <a class="copyCode" 
                                                    href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl27other');">
                                                <img align="middle" border="0" class="LibC_copy_off" height="9" 
                                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" /> 复制代码</a></div>
                                        </div>
                                        <div dir="ltr">
                                            <pre id="ctl00_rs1_mainContentContainer_ctl27other" class="libCScode" 
                                                space="preserve" style="white-space: pre-wrap;">(input parameters) =&gt; expression</pre>
                                        </div>
                                    </div>
                                    <p>
                                        只有在 Lambda 有一个输入参数时，括号才是可选的；否则括号是必需的。两个或更多输入参数由括在括号中的逗号分隔： 
                                    </p>
                                    <div id="ctl00_rs1_mainContentContainer_ctl28_other" class="">
                                        <div class="CodeSnippetTitleBar">
                                            <div class="CodeDisplayLanguage">
                                            </div>
                                            <div class="CopyCodeButton">
                                                <a class="copyCode" 
                                                    href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl28other');">
                                                <img align="middle" border="0" class="LibC_copy_off" height="9" 
                                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" /> 复制代码</a></div>
                                        </div>
                                        <div dir="ltr">
                                            <pre id="ctl00_rs1_mainContentContainer_ctl28other" class="libCScode" 
                                                space="preserve" style="white-space: pre-wrap;">(x, y) =&gt; x == y</pre>
                                        </div>
                                    </div>
                                    <p>
                                        有时，编译器难于或无法推断输入类型。如果出现这种情况，您可以按以下示例中所示方式显式指定类型： 
                                    </p>
                                    <div id="ctl00_rs1_mainContentContainer_ctl29_other" class="">
                                        <div class="CodeSnippetTitleBar">
                                            <div class="CodeDisplayLanguage">
                                            </div>
                                            <div class="CopyCodeButton">
                                                <a class="copyCode" 
                                                    href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl29other');">
                                                <img align="middle" border="0" class="LibC_copy_off" height="9" 
                                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" /> 复制代码</a></div>
                                        </div>
                                        <div dir="ltr">
                                            <pre id="ctl00_rs1_mainContentContainer_ctl29other" class="libCScode" 
                                                space="preserve" style="white-space: pre-wrap;">(int x, string s) =&gt; s.Length &gt; x</pre>
                                        </div>
                                    </div>
                                    <p>
                                        使用空括号指定零个输入参数： 
                                    </p>
                                    <div id="ctl00_rs1_mainContentContainer_ctl30_other" class="">
                                        <div class="CodeSnippetTitleBar">
                                            <div class="CodeDisplayLanguage">
                                            </div>
                                            <div class="CopyCodeButton">
                                                <a class="copyCode" 
                                                    href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl30other');">
                                                <img align="middle" border="0" class="LibC_copy_off" height="9" 
                                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" /> 复制代码</a></div>
                                        </div>
                                        <div dir="ltr">
                                            <pre id="ctl00_rs1_mainContentContainer_ctl30other" class="libCScode" 
                                                space="preserve" style="white-space: pre-wrap;">() =&gt; SomeMethod()</pre>
                                        </div>
                                    </div>
                                    <p>
                                        在上一个示例中，请注意 Lambda 表达式的主体可以包含方法调用。但是，如果要创建将在另一个域（比如 SQL Server）中使用的表达式目录树，则不应在 
                                        Lambda 表达式中使用方法调用。方法在 .NET 公共语言运行时上下文的外部将没有意义。 
                                    </p>
                                </div>
                            </div>
                        </div>
                        <div id="ctl00_rs1_mainContentContainer_cpe62401" 
                            class="MTPS_CollapsibleRegion">
                            <div id="ctl00_rs1_mainContentContainer_cpe62401_h" class="CollapseRegionLink">
                                <img id="ctl00_rs1_mainContentContainer_cpe62401_i" class="LibC_o" 
                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" 
                                    style="border-width: 0px; vertical-align: middle;" />&nbsp;Lambda 语句 
                            </div>
                            <div id="ctl00_rs1_mainContentContainer_cpe62401_c" 
                                class="MTPS_CollapsibleSection" 
                                style="overflow: visible; display: block; height: auto; width: 1217px;">
                                <div id="" class="MTPS_CollapsibleSection" style="display: block;">
                                    <a name="sectionToggle1"><!----></a>
                                    <p>
                                        Lambda 语句与 Lambda 表达式类似，只是语句括在大括号中： 
                                    </p>
                                    <div id="ctl00_rs1_mainContentContainer_ctl35_other" class="">
                                        <div class="CodeSnippetTitleBar">
                                            <div class="CodeDisplayLanguage">
                                            </div>
                                            <div class="CopyCodeButton">
                                                <a class="copyCode" 
                                                    href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl35other');">
                                                <img align="middle" border="0" class="LibC_copy_off" height="9" 
                                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" /> 复制代码</a></div>
                                        </div>
                                        <div dir="ltr">
                                            <pre id="ctl00_rs1_mainContentContainer_ctl35other" class="libCScode" 
                                                space="preserve" style="white-space: pre-wrap;">(input parameters) =&gt; {statement;}</pre>
                                        </div>
                                    </div>
                                    <p>
                                        Lambda 语句的主体可以包含任意数量的语句；但是，实际上通常不会多于两个或三个语句。 
                                    </p>
                                    <div id="ctl00_rs1_mainContentContainer_ctl36_other" class="">
                                        <div class="CodeSnippetTitleBar">
                                            <div class="CodeDisplayLanguage">
                                            </div>
                                            <div class="CopyCodeButton">
                                                <a class="copyCode" 
                                                    href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl36other');">
                                                <img align="middle" border="0" class="LibC_copy_off" height="9" 
                                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" /> 复制代码</a></div>
                                        </div>
                                        <div dir="ltr">
                                            <pre id="ctl00_rs1_mainContentContainer_ctl36other" class="libCScode" 
                                                space="preserve" style="white-space: pre-wrap;">delegate void TestDelegate(string s);
…
TestDelegate myDel = n =&gt; { string s = n + &quot; &quot; + &quot;World&quot;; Console.WriteLine(s); };
myDel(&quot;Hello&quot;);</pre>
                                        </div>
                                    </div>
                                    <p>
                                        像匿名方法一样，Lambda 语句无法用于创建表达式目录树。 
                                    </p>
                                </div>
                            </div>
                        </div>
                        <div id="ctl00_rs1_mainContentContainer_cpe62402" 
                            class="MTPS_CollapsibleRegion">
                            <div id="ctl00_rs1_mainContentContainer_cpe62402_h" class="CollapseRegionLink">
                                <img id="ctl00_rs1_mainContentContainer_cpe62402_i" class="LibC_o" 
                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" 
                                    style="border-width: 0px; vertical-align: middle;" />&nbsp;带有标准查询运算符的 Lambda
                            </div>
                            <div id="ctl00_rs1_mainContentContainer_cpe62402_c" 
                                class="MTPS_CollapsibleSection" 
                                style="overflow: visible; display: block; height: auto; width: 1217px;">
                                <div id="" class="MTPS_CollapsibleSection" style="display: block;">
                                    <a name="sectionToggle2"><!----></a>
                                    <p>
                                        许多标准查询运算符都具有输入参数，其类型是泛型委托的 <span sdata="cer" target="T:System.Func`2">
                                        <a id="ctl00_rs1_mainContentContainer_ctl51" 
                                            href="http://msdn.microsoft.com/zh-cn/library/bb549151.aspx" 
                                            onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe62402_c|ctl00_rs1_mainContentContainer_ctl51',this);">
                                        Func<span class="cs">&lt;</span><span class="vb">(Of </span><span class="cpp">&lt;</span><span 
                                            class="nu">(</span>T, TResult<span class="cs">&gt;</span><span class="vb">)</span><span 
                                            class="cpp">&gt;</span><span class="nu">)</span></a></span> 系列的其中之一。<span 
                                            sdata="cer" target="T:System.Func`2"><a 
                                            id="ctl00_rs1_mainContentContainer_ctl54" 
                                            href="http://msdn.microsoft.com/zh-cn/library/bb549151.aspx" 
                                            onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe62402_c|ctl00_rs1_mainContentContainer_ctl54',this);">Func<span 
                                            class="cs">&lt;</span><span class="vb">(Of </span><span class="cpp">&lt;</span><span 
                                            class="nu">(</span>T, TResult<span class="cs">&gt;</span><span class="vb">)</span><span 
                                            class="cpp">&gt;</span><span class="nu">)</span></a></span> 
                                        委托使用类型参数来定义输入参数的数量和类型，以及委托的返回类型。<b>Func</b> 
                                        委托对于封装应用于一组源数据中每个元素的用户定义表达式非常有用。例如，假设有以下委托类型： 
                                    </p>
                                    <div id="ctl00_rs1_mainContentContainer_ctl57_other" class="">
                                        <div class="CodeSnippetTitleBar">
                                            <div class="CodeDisplayLanguage">
                                            </div>
                                            <div class="CopyCodeButton">
                                                <a class="copyCode" 
                                                    href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl57other');">
                                                <img align="middle" border="0" class="LibC_copy_off" height="9" 
                                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" /> 复制代码</a></div>
                                        </div>
                                        <div dir="ltr">
                                            <pre id="ctl00_rs1_mainContentContainer_ctl57other" class="libCScode" 
                                                space="preserve" style="white-space: pre-wrap;">public delegate TResult Func&lt;TArg0, TResult&gt;(TArg0 arg0)</pre>
                                        </div>
                                    </div>
                                    <p>
                                        可以将委托实例化为 <span class="code">Func&lt;int,bool&gt; myFunc</span>，其中 
                                        <span sdata="langKeyword" value="int"><span class="keyword">int</span></span> 
                                        是输入参数，<span sdata="langKeyword" value="bool"><span class="keyword">bool</span></span> 
                                        是返回值。返回值始终在最后一个类型参数中指定。<b>Func&lt;int, string, bool&gt;</b> 定义包含两个输入参数（<span 
                                            sdata="langKeyword" value="int"><span class="keyword">int</span></span> 和 
                                        <span sdata="langKeyword" value="string"><span class="keyword">string</span></span>）且返回类型为 
                                        <span sdata="langKeyword" value="bool"><span class="keyword">bool</span></span> 
                                        的委托。在调用下面的 <b>Func</b> 委托时，该委托将返回 true 或 false 以指示输入参数是否等于 5： 
                                    </p>
                                    <div id="ctl00_rs1_mainContentContainer_ctl58_other" class="">
                                        <div class="CodeSnippetTitleBar">
                                            <div class="CodeDisplayLanguage">
                                            </div>
                                            <div class="CopyCodeButton">
                                                <a class="copyCode" 
                                                    href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl58other');">
                                                <img align="middle" border="0" class="LibC_copy_off" height="9" 
                                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" /> 复制代码</a></div>
                                        </div>
                                        <div dir="ltr">
                                            <pre id="ctl00_rs1_mainContentContainer_ctl58other" class="libCScode" 
                                                space="preserve" style="white-space: pre-wrap;">    Func&lt;int, bool&gt; myFunc = x =&gt; x == 5;
    bool result = myFunc(4); // returns false of course</pre>
                                        </div>
                                    </div>
                                    <p>
                                        当参数类型为 <b>Expression&lt;Func&gt;</b> 时，您也可以提供 Lambda 表达式，例如在 System.Linq.Queryable 
                                        内定义的标准查询运算符中。如果指定 <b>Expression&lt;Func&gt;</b> 参数，Lambda 将编译为表达式目录树。 
                                    </p>
                                    <p>
                                        此处显示了一个标准查询运算符，<span sdata="cer" 
                                            target="M:System.Linq.Enumerable.Count``1(System.Collections.Generic.IEnumerable{``0})"><a 
                                            id="ctl00_rs1_mainContentContainer_ctl59" 
                                            href="http://msdn.microsoft.com/zh-cn/library/system.linq.enumerable.count.aspx" 
                                            onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe62402_c|ctl00_rs1_mainContentContainer_ctl59',this);">Count</a></span> 
                                        方法： 
                                    </p>
                                    <div id="ctl00_rs1_mainContentContainer_ctl60_other" class="">
                                        <div class="CodeSnippetTitleBar">
                                            <div class="CodeDisplayLanguage">
                                            </div>
                                            <div class="CopyCodeButton">
                                                <a class="copyCode" 
                                                    href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl60other');">
                                                <img align="middle" border="0" class="LibC_copy_off" height="9" 
                                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" /> 复制代码</a></div>
                                        </div>
                                        <div dir="ltr">
                                            <pre id="ctl00_rs1_mainContentContainer_ctl60other" class="libCScode" 
                                                space="preserve" style="white-space: pre-wrap;">    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
    int oddNumbers = numbers.Count(n =&gt; n % 2 == 1);</pre>
                                        </div>
                                    </div>
                                    <p>
                                        编译器可以推断输入参数的类型，或者您也可以显式指定该类型。这个特别的 Lambda 表达式将计算整数 (<span class="code">n</span>) 
                                        的数量，这些整数除以 2 时余数为 1。 
                                    </p>
                                    <p>
                                        以下方法将生成一个序列，其中包含数字数组中出现在“9”之前的所有元素，因为“9”是序列中不满足条件的第一个数字： 
                                    </p>
                                    <div id="ctl00_rs1_mainContentContainer_ctl61_other" class="">
                                        <div class="CodeSnippetTitleBar">
                                            <div class="CodeDisplayLanguage">
                                            </div>
                                            <div class="CopyCodeButton">
                                                <a class="copyCode" 
                                                    href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl61other');">
                                                <img align="middle" border="0" class="LibC_copy_off" height="9" 
                                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" /> 复制代码</a></div>
                                        </div>
                                        <div dir="ltr">
                                            <pre id="ctl00_rs1_mainContentContainer_ctl61other" class="libCScode" 
                                                space="preserve" style="white-space: pre-wrap;">    var firstNumbersLessThan6 = numbers.TakeWhile(n =&gt; n &lt; 6);</pre>
                                        </div>
                                    </div>
                                    <p>
                                        此示例演示如何通过将输入参数括在括号中来指定多个输入参数。该方法将返回数字数组中的所有元素，直至遇到一个值小于其位置的数字为止。不要将 Lambda 运算符 (<span 
                                            sdata="langKeyword" value="=&gt;"><span class="keyword">=&gt;</span></span>) 
                                        与大于等于运算符 (<span sdata="langKeyword" value="=&gt;"><span class="keyword">=&gt;</span></span>) 
                                        混淆。 
                                    </p>
                                    <div id="ctl00_rs1_mainContentContainer_ctl62_other" class="">
                                        <div class="CodeSnippetTitleBar">
                                            <div class="CodeDisplayLanguage">
                                            </div>
                                            <div class="CopyCodeButton">
                                                <a class="copyCode" 
                                                    href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl62other');">
                                                <img align="middle" border="0" class="LibC_copy_off" height="9" 
                                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" /> 复制代码</a></div>
                                        </div>
                                        <div dir="ltr">
                                            <pre id="ctl00_rs1_mainContentContainer_ctl62other" class="libCScode" 
                                                space="preserve" style="white-space: pre-wrap;">    var firstSmallNumbers = numbers.TakeWhile((n, index) =&gt; n &gt;= index);</pre>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div id="ctl00_rs1_mainContentContainer_cpe62403" 
                            class="MTPS_CollapsibleRegion">
                            <div id="ctl00_rs1_mainContentContainer_cpe62403_h" class="CollapseRegionLink">
                                <img id="ctl00_rs1_mainContentContainer_cpe62403_i" class="LibC_o" 
                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" 
                                    style="border-width: 0px; vertical-align: middle;" />&nbsp;Lambda 中的类型推理 
                            </div>
                            <div id="ctl00_rs1_mainContentContainer_cpe62403_c" 
                                class="MTPS_CollapsibleSection" 
                                style="overflow: visible; display: block; height: auto; width: 1217px;">
                                <div id="" class="MTPS_CollapsibleSection" style="display: block;">
                                    <a name="sectionToggle3"><!----></a>
                                    <p>
                                        在编写 Lambda 时，通常不必为输入参数指定类型，因为编译器可以基于 Lambda 主体、基础委托类型以及 C# 3.0 
                                        语言规范中描述的其他因素推断类型。对于大多数标准查询运算符，第一个输入是源序列中的元素的类型。因此，如果要查询 <b>IEnumerable&lt;Customer&gt;</b>，则输入变量将被推断为 
                                        <span class="code">Customer</span> 对象，这意味着您可以访问其方法和属性： 
                                    </p>
                                    <div id="ctl00_rs1_mainContentContainer_ctl67_other" class="">
                                        <div class="CodeSnippetTitleBar">
                                            <div class="CodeDisplayLanguage">
                                            </div>
                                            <div class="CopyCodeButton">
                                                <a class="copyCode" 
                                                    href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl67other');">
                                                <img align="middle" border="0" class="LibC_copy_off" height="9" 
                                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" /> 复制代码</a></div>
                                        </div>
                                        <div dir="ltr">
                                            <pre id="ctl00_rs1_mainContentContainer_ctl67other" class="libCScode" 
                                                space="preserve" style="white-space: pre-wrap;">customers.Where(c =&gt; c.City == &quot;London&quot;);</pre>
                                        </div>
                                    </div>
                                    <p>
                                        Lambda 的一般规则如下： 
                                    </p>
                                    <ul>
                                        <li>
                                            <p>
                                                Lambda 包含的参数数量必须与委托类型包含的参数数量相同。 
                                            </p>
                                        </li>
                                        <li>
                                            <p>
                                                Lambda 中的每个输入参数必须都能够隐式转换为其对应的委托参数。 
                                            </p>
                                        </li>
                                        <li>
                                            <p>
                                                Lambda 的返回值（如果有）必须能够隐式转换为委托的返回类型。 
                                            </p>
                                        </li>
                                    </ul>
                                    <p>
                                        请注意，Lambda 表达式本身没有类型，因为通用类型系统没有“Lambda 表达式”这一内部概念。但是，有时会不正式地论及 Lambda 
                                        表达式的“类型”。在这些情况下，类型是指委托类型或 Lambda 表达式所转换为的 <span sdata="cer" 
                                            target="T:System.Linq.Expressions.Expression">
                                        <a id="ctl00_rs1_mainContentContainer_ctl68" 
                                            href="http://msdn.microsoft.com/zh-cn/library/system.linq.expressions.expression.aspx" 
                                            onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe62403_c|ctl00_rs1_mainContentContainer_ctl68',this);">
                                        Expression</a></span> 类型。 
                                    </p>
                                </div>
                            </div>
                        </div>
                        <div id="ctl00_rs1_mainContentContainer_cpe62404" 
                            class="MTPS_CollapsibleRegion">
                            <div id="ctl00_rs1_mainContentContainer_cpe62404_h" class="CollapseRegionLink">
                                <img id="ctl00_rs1_mainContentContainer_cpe62404_i" class="LibC_o" 
                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" 
                                    style="border-width: 0px; vertical-align: middle;" />&nbsp;Lambda 表达式中的变量范围 
                            </div>
                            <div id="ctl00_rs1_mainContentContainer_cpe62404_c" 
                                class="MTPS_CollapsibleSection" 
                                style="overflow: visible; display: block; height: auto; width: 1217px;">
                                <div id="" class="MTPS_CollapsibleSection" style="display: block;">
                                    <a name="sectionToggle4"><!----></a>
                                    <p>
                                        Lambda 可以引用“外部变量”，这些变量位于在其中定义 Lambda 的封闭方法或类型的范围内。将会存储通过这种方法捕获的变量以供在 Lambda 
                                        表达式中使用，即使变量将以其他方式超出范围或被作为垃圾回收。必须明确地分配外部变量，然后才能在 Lambda 表达式中使用该变量。下面的示例演示这些规则： 
                                    </p>
                                    <div id="ctl00_rs1_mainContentContainer_ctl72_other" class="">
                                        <div class="CodeSnippetTitleBar">
                                            <div class="CodeDisplayLanguage">
                                            </div>
                                            <div class="CopyCodeButton">
                                                <a class="copyCode" 
                                                    href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl72other');">
                                                <img align="middle" border="0" class="LibC_copy_off" height="9" 
                                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" /> 复制代码</a></div>
                                        </div>
                                        <div dir="ltr">
                                            <pre id="ctl00_rs1_mainContentContainer_ctl72other" class="libCScode" 
                                                space="preserve" style="white-space: pre-wrap;">delegate bool D();
    delegate bool D2(int i);

    class Test
    {
        D del;
        D2 del2;
        public void TestMethod(int input)
        {
            int j = 0;
            // Initialize the delegates with lambda expressions.
            // Note access to 2 outer variables.
            // del will be invoked within this method.
            del = () =&gt; { j = 10;  return j &gt; input; };

            // del2 will be invoked after TestMethod goes out of scope.
            del2 = (x) =&gt; {return x == j; };
            
            // Demonstrate value of j:
            // Output: j = 0 
            // The delegate has not been invoked yet.
            Console.WriteLine(&quot;j = {0}&quot;, j);

            // Invoke the delegate.
            bool boolResult = del();

            // Output: j = 10 b = True
            Console.WriteLine(&quot;j = {0}. b = {1}&quot;, j, boolResult);
        }

        static void Main()
        {
            Test test = new Test();
            test.TestMethod(5);

            // Prove that del2 still has a copy of
            // local variable j from TestMethod.
            bool result = test.del2(10);

            // Output: True
            Console.WriteLine(result);
            
            Console.ReadKey();
        }
    }
</pre>
                                        </div>
                                    </div>
                                    <p>
                                        下列规则适用于 Lambda 表达式中的变量范围： 
                                    </p>
                                    <ul>
                                        <li>
                                            <p>
                                                捕获的变量将不会被作为垃圾回收，直至引用变量的委托超出范围为止。 
                                            </p>
                                        </li>
                                        <li>
                                            <p>
                                                在外部方法中看不到 Lambda 表达式内引入的变量。 
                                            </p>
                                        </li>
                                        <li>
                                            <p>
                                                Lambda 表达式无法从封闭方法中直接捕获 <span sdata="langKeyword" value="ref">
                                                <span class="keyword">ref</span></span> 或 <span sdata="langKeyword" value="out">
                                                <span class="keyword">out</span></span> 参数。 
                                            </p>
                                        </li>
                                        <li>
                                            <p>
                                                Lambda 表达式中的返回语句不会导致封闭方法返回。 
                                            </p>
                                        </li>
                                        <li>
                                            <p>
                                                Lambda 表达式不能包含其目标位于所包含匿名函数主体外部或内部的 <span sdata="langKeyword" value="goto">
                                                <span class="keyword">goto</span></span> 语句、<span sdata="langKeyword" 
                                                    value="break"><span class="keyword">break</span></span> 语句或 
                                                <span sdata="langKeyword" value="continue"><span class="keyword">continue</span></span> 
                                                语句。 
                                            </p>
                                        </li>
                                    </ul>
                                </div>
                            </div>
                        </div>
                        <div id="ctl00_rs1_mainContentContainer_cpe62405" 
                            class="MTPS_CollapsibleRegion">
                            <div id="ctl00_rs1_mainContentContainer_cpe62405_h" class="CollapseRegionLink">
                                <img id="ctl00_rs1_mainContentContainer_cpe62405_i" class="LibC_o" 
                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" 
                                    style="border-width: 0px; vertical-align: middle;" />&nbsp;C# 语言规范 
                            </div>
                            <div id="ctl00_rs1_mainContentContainer_cpe62405_c" 
                                class="MTPS_CollapsibleSection" 
                                style="overflow: visible; display: block; height: auto; width: 1217px;">
                                <div id="" class="MTPS_CollapsibleSection" style="display: block;">
                                    <a name="sectionToggle5"><!----></a>
                                    <p>
                                        有关更多信息，请参见 <span sdata="link"><a id="ctl00_rs1_mainContentContainer_ctl76" 
                                            href="http://msdn.microsoft.com/zh-cn/library/ms228593.aspx" 
                                            onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe62405_c|ctl00_rs1_mainContentContainer_ctl76',this);">
                                        C# 语言规范</a></span>中的以下各章节： 
                                    </p>
                                    <ul>
                                        <li>
                                            <p>
                                                5.3.3.29 匿名函数 
                                            </p>
                                        </li>
                                    </ul>
                                </div>
                            </div>
                        </div>
                        <div id="ctl00_rs1_mainContentContainer_cpe62406" 
                            class="MTPS_CollapsibleRegion">
                            <div id="ctl00_rs1_mainContentContainer_cpe62406_h" class="CollapseRegionLink">
                                <img id="ctl00_rs1_mainContentContainer_cpe62406_i" class="LibC_o" 
                                    src="http://i.msdn.microsoft.com/Global/Images/clear.gif" 
                                    style="border-width: 0px; vertical-align: middle;" />&nbsp;请参见 
                            </div>
                            <div id="ctl00_rs1_mainContentContainer_cpe62406_c" 
                                class="MTPS_CollapsibleSection" 
                                style="overflow: visible; display: block; height: auto; width: 1217px;">
                                <div id="" class="MTPS_CollapsibleSection" style="display: block;">
                                    <a name="seeAlsoToggle"><!----></a>
                                    <h4 class="subHeading">
                                        概念</h4>
                                    <div class="seeAlsoStyle">
                                        <span sdata="link"><a id="ctl00_rs1_mainContentContainer_ctl85" 
                                            href="http://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx" 
                                            onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe62406_c|ctl00_rs1_mainContentContainer_ctl85',this);">
                                        C# 编程指南</a></span></div>
                                    <div class="seeAlsoStyle">
                                        <span sdata="link"><a id="ctl00_rs1_mainContentContainer_ctl86" 
                                            href="http://msdn.microsoft.com/zh-cn/library/bb397951.aspx" 
                                            onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe62406_c|ctl00_rs1_mainContentContainer_ctl86',this);">
                                        表达式目录树</a></span></div>
                                    <h4 class="subHeading">
                                        参考</h4>
                                    <div class="seeAlsoStyle">
                                        <span sdata="link"><a id="ctl00_rs1_mainContentContainer_ctl87" 
                                            href="http://msdn.microsoft.com/zh-cn/library/0yw3tz5k.aspx" 
                                            onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe62406_c|ctl00_rs1_mainContentContainer_ctl87',this);">
                                        匿名方法（C# 编程指南）</a></span></div>
                                    <div class="seeAlsoStyle">
                                        <span sdata="link"><a id="ctl00_rs1_mainContentContainer_ctl88" 
                                            href="http://msdn.microsoft.com/zh-cn/library/scekt9xw.aspx" 
                                            onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe62406_c|ctl00_rs1_mainContentContainer_ctl88',this);">
                                        is（C# 参考）</a></span></div>
                                    <h4 class="subHeading">
                                        其他资源</h4>
                                    <div class="seeAlsoStyle">
                                        <span sdata="link"><a id="ctl00_rs1_mainContentContainer_ctl89" 
                                            href="http://msdn.microsoft.com/zh-cn/library/bb397926.aspx" 
                                            onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe62406_c|ctl00_rs1_mainContentContainer_ctl89',this);">
                                        语言集成查询 (LINQ)</a></span></div>
                                    <div class="seeAlsoStyle">
                                        <a id="ctl00_rs1_mainContentContainer_ctl90" 
                                            href="http://go.microsoft.com/fwlink/?LinkId=112395" 
                                            onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe62406_c|ctl00_rs1_mainContentContainer_ctl90',this);">
                                        Recursive lambda expressions（递归 lambda 表达式）</a></div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>
